package run.siyuan.jdk.算法_4版.排序;



/**
 * <p> 首先，找到数组中最小的那个元素，其次，将它和数组的第
 * 一个元素交换位置（如果第一个元素就是最小元素那么它就和自己交换）。再次，在剩下的元素中
 * 找到最小的元素，将它与数组的第二个元素交换位置。如此往复，直到将整个数组排序。这种方法
 * 叫做选择排序，因为它在不断地选择剩余元素之中的最小者。
 * @className: Selection
 * @Description: TODO 选择排序
 * @author: siyuan
 * @date: 2022/12/14 16:44
 */
public class SelectionUtil extends BaseSort {

    /**
     * 将a[]按降序排列并返回
     *
     * @param a 源数组
     * @return
     */
    public static void sortDesc(Comparable[] a) {
        int n = a.length;
        for (int i = 0; i < n; i++) {
            Comparable v = a[i];
            for (int j = i + 1; j < n; j++) {
                Comparable w = a[j];
                if (less(v, w)) {
                    v = w;
                    exch(a, i, j);
                }
            }
        }
    }

    /**
     * 将a[]按升序排列并返回
     *
     * @param a 源数组
     * @return
     */
    public static void sortAsc(Comparable[] a) {
        int n = a.length;
        for (int i = 0; i < n; i++) {
            Comparable v = a[i];
            for (int j = i + 1; j < n; j++) {
                Comparable w = a[j];
                if (more(v, w)) {
                    v = w;
                    exch(a, i, j);
                }
            }
        }
    }

}
